﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DbTaglio.SvcLayer.DbTaglioService;

namespace DbTaglio.SvcLayer
{
    public class DichiarazioniValidator : ValidatorBase<Dichiarazione>
    {
        public Dichiarazione Dati { get; set; }

        public DichiarazioniValidator(Dichiarazione pItem): base()
        {
            Dati = pItem;          
        }


        public IEnumerable<string> Convalida(ValidationLevel  pLevel  )
        {
            return Validate(Dati, pLevel); 
        }


        protected override IEnumerable<ValidatorBase<Dichiarazione>.Rule> AllRules
        {
            get 
            {
                return new Rule[] {

                //Data
                new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => xx.DataInserimento == null ), Message = "La Data deve essere immessa " },
                //Fornitore
               // new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => xx.c < 1), Message = "Scegliere un fornitore" },
                //Tipo macchina
                new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => xx.IdMacchina < 1), Message = "Scegliere il tipo macchina" },
                //Operatività
                new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => xx.IdOperativita < 1), Message = "Scegliere l'operatività" },
                //Operatore 1
                 new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => xx.CodiceOper1 == "-1"), Message = "Scegliere l'operatore 1" },
                //Operatore 2
                 //new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => xx.CodiceOper2 == "-1"), Message = "Scegliere l'operatore 2" },
                 //Codice Materiale
                 new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => xx.CodiceMateriale == "-1"), Message = "Scegliere il materiale" },    
                  //Colore
                 new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => xx.CodiceColore == "-1"), Message = "Scegliere il colore" },    
                 //Stagione
                 new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => xx.CodiceStagione == "-1"), Message = "Scegliere la stagione" },    
                 //Conceria
                new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => xx.IdConceria < 1), Message = "Scegliere la conceria" },

                 //Verbale lotto bolla
                 new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => xx.IdVerbale < 1 || 
                     ( string.IsNullOrEmpty(xx.Lotto) || string.IsNullOrEmpty(xx.Bolla) )), Message = "Immettere il verbale o il Lotto o la bolla" },
                 //Verbale lotto bolla esclusivi
                 new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => ( xx.IdVerbale > 0) & 
                     ( (!string.IsNullOrEmpty(xx.Lotto)) & (!string.IsNullOrEmpty(xx.Bolla)) )), Message = "Immettere o il verbale o il Lotto o la bolla (solo uno dei tre)" },



                         //Causale
                new Rule { TestIfError = new Func<Dichiarazione,bool>(xx => xx.IdCausale < 1), Message = "Scegliere la causale" },
                

                // new Rule { TestIfError = new Func<DatiDichiarazioni,bool>(xx => !string.IsNullOrEmpty()), Message = "Name must be provided" },

                // new Rule { TestIfError = new Func<DatiDichiarazioni,bool>(xx => !string.IsNullOrEmpty()), Message = "Name must be provided" },

                // new Rule { TestIfError = new Func<DatiDichiarazioni,bool>(xx => !string.IsNullOrEmpty()), Message = "Name must be provided" },

                // new Rule { TestIfError = new Func<DatiDichiarazioni,bool>(xx => !string.IsNullOrEmpty()), Message = "Name must be provided" },
            };
            }
        }
    }
}
